﻿using System;
using System.IO;
using System.Threading.Tasks;
using Senparc.Weixin.Entities;
using Senparc.Weixin.Helpers;
using Senparc.Weixin.HttpUtility;
using Senparc.Weixin.MP;
using Senparc.CO2NET.Helpers;
using Senparc.Weixin;

namespace Business
{
    /* 
    tip：通过该接口，仅能生成已发布的小程序的二维码。
    tip：可以在开发者工具预览时生成开发版的带参二维码。
    tip：带参二维码只有 10000 个，请谨慎调用。
    */

    /// <summary>
    /// WxApp接口
    /// </summary>
    public static class WxAppApi
    {
        #region 同步请求

        /// <summary>
        /// 获取小程序页面的小程序码
        /// </summary>
        /// <param name="accessTokenOrAppId">AccessToken或AppId（推荐使用AppId，需要先注册）</param>
        /// <param name="stream">储存小程序码的流</param>
        /// <param name="path">不能为空，最大长度 128 字节（如：pages/index?query=1。注：pages/index 需要在 app.json 的 pages 中定义）</param>
        /// <param name="width">小程序码的宽度</param>
        /// <param name="auto_color">自动配置线条颜色</param>
        /// <param name="timeOut">请求超时时间</param>
        /// <returns></returns>
        public static WxJsonResult GetWxaCode_unlimit(string accessTokenOrAppId, Stream stream, string path, string scene, int width = 430, int tid = 0, bool auto_color = false, int timeOut = 10000)
        {
            KqLogic.log("scene : " + scene.ToString());

            return ApiHandlerWapper.TryCommonApi(accessToken =>
            {
                const string urlFormat = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={0}";
                var url = string.Format(urlFormat, accessToken);

                var data = new { path = path, width = width, scene = scene };
                //Post.Download(url, SerializerHelper.GetJsonString(data), stream);
                Senparc.CO2NET.HttpUtility.Post.Download(CommonDI.CommonSP,url, SerializerHelper.GetJsonString(data), stream);
                return new WxJsonResult() { errcode = Senparc.Weixin.ReturnCode.请求成功 };
            }, accessTokenOrAppId);

        }

        /// <summary>
        /// 获取小程序页面的小程序码
        /// </summary>
        /// <param name="accessTokenOrAppId">AccessToken或AppId（推荐使用AppId，需要先注册）</param>
        /// <param name="filePath">储存图片的物理路径</param>
        /// <param name="path">不能为空，最大长度 128 字节（如：pages/index?query=1。注：pages/index 需要在 app.json 的 pages 中定义）</param>
        /// <param name="width">二维码的宽度</param>
        /// <param name="auto_color">自动配置线条颜色</param>
        /// <param name="timeOut">请求超时时间</param>
        /// <returns></returns>
        public static WxJsonResult GetWxaCode_unlimit(string accessTokenOrAppId, string filePath, string path, string scene, int width = 430, int tid =0, bool auto_color = false, int timeOut = 10000)
        {
            using (var ms = new MemoryStream())
            {
                var result = WxAppApi.GetWxaCode_unlimit(accessTokenOrAppId, ms, path,  scene, width,tid);
                ms.Seek(0, SeekOrigin.Begin);
                //储存图片
                if (File.Exists(filePath)) {
                    File.Delete(filePath);
                }

                using (var fs = new FileStream(filePath, FileMode.CreateNew))
                {
                    ms.CopyTo(fs);
                    fs.Flush();
                    fs.Close();
                    fs.Dispose();
                }
                return result;
            }
        }


        #endregion

    }
}